package com.demo.juc.lock;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.Semaphore;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;

/**
 * @Author: jxm
 * @Description:
 * @Date: 2023/2/17 15:17
 * @Version: 1.0
 */
public class Test {

    public static void main(String[] args) {
            BlockingQueue<String> blockingDeque = new SynchronousQueue<>();//同步队列
            new Thread(()->{
                try {
                    System.out.println(Thread.currentThread().getName() + "PUT 1");
                    blockingDeque.put("1");
                    System.out.println(Thread.currentThread().getName() + "PUT 2");
                    blockingDeque.put("2");
                    System.out.println(Thread.currentThread().getName() + "PUT 3");
                    blockingDeque.put("3");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            },"T1").start();

            new Thread(()->{
                try {
                    TimeUnit.SECONDS.sleep(3);
                    System.out.println(Thread.currentThread().getName() + "=>" + blockingDeque.take());
                    TimeUnit.SECONDS.sleep(3);
                    System.out.println(Thread.currentThread().getName() + "=>" + blockingDeque.take());
                    TimeUnit.SECONDS.sleep(3);
                    System.out.println(Thread.currentThread().getName() + "=>" +blockingDeque.take());

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            },"T2").start();
        }
}
